<?php

namespace app\common\model\service;

use app\common\model\BaseModel;
use app\common\model\hfztcy\LibConfig;
use common\Common;

//公共函数

/**
 * 门店登录
 * @name LibPoster.php
 * @package hfztcy
 * @category model
 * @link http://www.chanekeji.com
 * @author rxy
 * @version 1.0
 * @copyright CHANGE INC
 * @since 2022-06-17
 */
class LibPoster extends BaseModel
{
    public $bgImg;//海报背景图

    /**
     * Info: 获取配置的海报图路径
     * Date: 2022/12/10 19:52
     */
    private function getConfigByPoster()
    {
        $configModel = new LibConfig();
        return $configModel->findConfig(['item_key' => 'posters_img']);
    }

    /**
     * Info: 将二维码与海报背景图合成
     * Date: 2022/12/10 19:52
     */
    public function generatePosters($wxQrCodeUrl)
    {
        $configRes = $this->getConfigByPoster();
        if ($configRes['errorCode'] == 1) {
            return Common::errorArray(1, '平台未设置推广码背景图', false);
        }
        $ROOT = ROOT_PATH . 'public/';
        // 海报背景图
        $this->bgImg = $ROOT . $configRes['data']['item_value'];
        // 保存海报合成图位置
        $fileDir = "posters";
        $mergePosterPath = $ROOT . $fileDir . "/" . date('Ymd') . "/";
        // 保存重新生成的二维码图片位置
        $fileDir = "qrcode";
        $qrcodePath = $ROOT . $fileDir . "/" . date('Ymd') . "/";//缩放二维码
        // 检查是否有该文件夹，如果没有就创建，并给予最高权限
        if (!file_exists($mergePosterPath)) {
            mkdir($mergePosterPath, 0777, true);
        }
        // 检查是否有该文件夹，如果没有就创建，并给予最高权限
        if (!file_exists($qrcodePath)) {
            mkdir($qrcodePath, 0777, true);
        }
        // 目标文件名
        $prefix = time() . rand(0000, 9999);
        $filename = $qrcodePath . $prefix . '.png';
        $originalFilename = $qrcodePath . $prefix . 'original_.png';
        // 获取二维码图片位置
        $qrcodePath = $this->saveImageAndZoom($wxQrCodeUrl,$filename,0.3);
        // 原尺寸二维码图片
        $this->saveImageOriginalSize($wxQrCodeUrl,$originalFilename);
        // 合成图片
        $mergePosterPath = $this->mergeImg($qrcodePath,$mergePosterPath,$prefix);
        return Common::errorArray(0, '海报图', $mergePosterPath);
    }

    /**
     * Info: 重新生成图片，对微信接口图片地址进行保存并缩放
     * Date: 2022/12/10 19:45
     */
    private function saveImageAndZoom($src,$filename,$rate = 0.15)
    {
        // 获取原图像$filename的宽度$width_orig和高度$height_orig
        list($width_orig, $height_orig) = getimagesize($src);
        // 根据参数$width和$height值，换算出等比例缩放的高度和宽度
        $width = $width_orig * $rate;
        $height = $height_orig * $rate;
        // 将原图缩放到这个新创建的图片资源中
        $image_p = imagecreatetruecolor($width, $height);
        //获取原图的图像资源
        $image = imagecreatefromjpeg($src);
        //进行缩放设置
        imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
        // 保存缩放图片
        imagejpeg($image_p, $filename);
        // 释放内存
        imagedestroy($image_p);
        imagedestroy($image);
        // 返回图片地址
        return $filename;
    }

    /**
     * Info: 原尺寸在图片
     * Date: 2023/1/30 10:21
     */
    private function saveImageOriginalSize($src,$filename)
    {
        // 获取原图像$filename的宽度$width_orig和高度$height_orig
        list($width_orig, $height_orig) = getimagesize($src);
        // 根据参数$width和$height值，换算出等比例缩放的高度和宽度
        $width = $width_orig;
        $height = $height_orig;
        // 将原图缩放到这个新创建的图片资源中
        $image_p = imagecreatetruecolor($width, $height);
        //获取原图的图像资源
        $image = imagecreatefromjpeg($src);
        //进行缩放设置
        imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
        // 保存缩放图片
        imagejpeg($image_p, $filename);
        // 释放内存
        imagedestroy($image_p);
        imagedestroy($image);
        // 返回图片地址
        return $filename;
    }

    /**
     * Info: 合成图片
     * Date: 2022/12/10 19:53
     */
    private function mergeImg($qrcodeImg, $mergeImgPath,$prefix)
    {
        //创建图片对象
        $image_1 = imagecreatefromstring(file_get_contents($this->bgImg));
        $image_2 = imagecreatefromstring(file_get_contents($qrcodeImg));
        // 背景图尺寸
        $bg_x = imagesx($image_1);
        $bg_y = imagesy($image_1);
        // 二维码尺寸
        $qr_x = imagesx($image_2);
        $qr_y = imagesy($image_2);
        // 创建真彩画布
        // 新建一个真彩色图像
        $image_3 = imagecreatetruecolor($bg_x, $bg_y);
        // 为真彩画布创建白色背景
        $color = imagecolorallocate($image_3, 255, 255, 255);
        // 在 image 图像的坐标 x，y（图像左上角为 0, 0）处用 color 颜色执行区域填充（即与 x, y 点颜色相同且相邻的点都会被填充）
        imagefill($image_3, 0, 0, $color);
        imagecopyresampled($image_3, $image_1, 0, 0, 0, 0, $bg_x, $bg_y, $bg_x, $bg_y);
        imagecopymerge($image_3, $image_2, $bg_x - $qr_x - 450, $bg_y - $qr_y - 250, 0, 0, $qr_x, $qr_y, 100);
        $filename = $mergeImgPath . $prefix . '.png';
        // 输出合成图片
        imagepng($image_3, $filename);
        // 释放内存
        imagedestroy($image_3);
        return $filename;
    }
}

?>